package utils

import (
	"context"
	"fmt"
	"time"

	"github.com/zeromicro/go-zero/core/stores/redis"
)

type TokenStore struct {
	redisClient *redis.Redis
	ttl         time.Duration
}

func NewTokenStore(redisClient *redis.Redis, ttl int) *TokenStore {
	return &TokenStore{
		redisClient: redisClient,
		ttl:         time.Duration(ttl) * time.Second,
	}
}

func (s *TokenStore) StoreRefreshToken(ctx context.Context, userId int, token string) error {
	key := s.getKey(userId)
	err := s.redisClient.SetexCtx(ctx, key, token, int(s.ttl.Seconds()))
	return err
}

func (s *TokenStore) GetRefreshToken(ctx context.Context, userId int) (string, error) {
	return s.redisClient.GetCtx(ctx, s.getKey(userId))
}

func (s *TokenStore) DeleteRefreshToken(ctx context.Context, userId int) error {
	_, err := s.redisClient.DelCtx(ctx, s.getKey(userId))
	return err
}

func (s *TokenStore) getKey(userId int) string {
	return fmt.Sprintf("refresh_token:%d", userId)
}
